在前面的篇幅介紹了一些 TypeScript 的基礎應用,所以這篇文章中,將介紹如何將 TypeScript 加入到現有的 JavaScript 專案,並以一個簡單的 To-Do List 為例,逐步展示如何進行轉換,並提升程式碼的可讀性與可維護性。
假設我們已經有一個簡單的 To-Do List JavaScript 專案。而這個專案目前有這兩個主要功能 — 新增待辦事項與標記已完成事項:
<!-- index.html -->
<!DOCTYPE html>
<html lang="ZH-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do List</title>
</head>
<body>
<h1>To-Do List</h1>
<input type="text" id="todo-input" placeholder="Add a new task" />
<button id="add-btn">Add Task</button>
<ul id="todo-list"></ul>
<script src="app.js"></script>
</body>
</html>
// app.js
document.getElementById('add-btn').addEventListener('click', function() {
const input = document.getElementById('todo-input').value;
if (input.trim()) {
const listItem = document.createElement('li');
listItem.textContent = input;
document.getElementById('todo-list').appendChild(listItem);
}
});
首先,我們需要在專案中安裝 TypeScript。打開終端機並執行以下指令:
npm init -y
npm install typescript --save-dev
接著,我們可以初始化 TypeScript 配置文件,執行以下指令來生成 tsconfig.json
:
npx tsc --init
這份 tsconfig.json
會包含 TypeScript 的基本配置,我們可以保留默認的設定,然後接下來一步一步把 JavaScript 轉換為 TypeScript。
首先,把 app.js
檔案變更副檔名為 app.ts
,然後逐步把程式碼加上型別註記。
// app.ts
const addButton = document.getElementById('add-btn') as HTMLButtonElement;
const inputField = document.getElementById('todo-input') as HTMLInputElement;
const todoList = document.getElementById('todo-list') as HTMLUListElement;
addButton.addEventListener('click', function () {
const input = inputField.value;
if (input.trim()) {
const listItem = document.createElement('li');
listItem.textContent = input;
todoList.appendChild(listItem);
}
});
在這裡,使用了 TypeScript 的型別斷言 (as
) 來明確指定 DOM 元素的型別。這樣能幫助 TypeScript 更精確地了解元素的型別,從而更好地進行型別檢查。
我們可以使用 TypeScript 編譯器來將 .ts 檔案編譯為 JavaScript。執行以下指令:
npx tsc
這個命令會把 app.ts
編譯為 app.js
,並生成對應的 JavaScript 檔案。
現在,就可以嘗試加入更多的功能、利用 TypeScript 的型別系統進一步強化程式碼囉!
我們可以定義一個 Task
型別來描述每個待辦事項,並確保待辦事項的資料結構一致:
interface Task {
id: number;
description: string;
completed: boolean;
}
const tasks: Task[] = [];
addButton.addEventListener('click', function () {
const input = inputField.value;
if (input.trim()) {
const newTask: Task = {
id: tasks.length + 1,
description: input,
completed: false
};
tasks.push(newTask);
renderTask(newTask);
}
});
function renderTask(task: Task) {
const listItem = document.createElement('li');
listItem.textContent = task.description;
todoList.appendChild(listItem);
}
可以發現,為每個待辦事項建立了一個資料結構後,就可以讓程式碼更加地清晰與好維護。
在這篇文章中,用簡單常見的例子展示了如何把 TypeScript 引入現有的 JavaScript 專案裡,體驗了靜態型別系統帶來的好處。透過型別檢查,可以減少許多潛在的錯誤,使專案更加穩定並提高開發效率。